package com.one.group.service;

import com.mybatisflex.core.service.IService;
import com.one.group.model.dto.*;
import com.one.group.model.entity.DecorationManagement;
import com.one.group.model.vo.DecorationManagementListVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author kld
 * @date 2025/10/1
 * @description 装修管理Service
 */
public interface DecorationManagementService extends IService<DecorationManagement> {

    /**
     * 查询装修管理列表
     * @param queryDto 查询条件
     * @return 查询结果
     */
    List<DecorationManagement> findByDecorationQueryDto(DecorationManagementQueryDto queryDto);
    
    /**
     * 查询装修管理列表（包含小区名称）
     * @param queryDto 查询条件
     * @return 查询结果
     */
    List<DecorationManagementListVo> findDecorationListWithCellName(DecorationManagementQueryDto queryDto);

    /**
     * 查询装修列表
     * @param decorationQueryDto 关键字
     * @return 装修列表
     */
    List<DecorationManagementListVo> findDecorationListByQueryDto(DecorationQueryDto decorationQueryDto);
    /**
     * 新增装修申请
     * @param decorationManagement 装修信息
     * @return 是否成功
     */
    boolean addDecoration(DecorationManagement decorationManagement);

    /**
     * 修改装修信息
     * @param decorationManagement 装修信息
     * @return 是否成功
     */
    boolean updateDecoration(DecorationManagement decorationManagement);

    /**
     * 删除装修信息（软删除）
     * @param id 主键ID
     * @return 是否成功
     */
    boolean deleteDecoration(Long id);

    /**
     * 批量删除装修信息
     * @param ids ID列表
     * @return 是否成功
     */
    boolean batchDelete(List<Long> ids);

    /**
     * 审核装修申请
     * @param id 主键ID
     * @param status 状态
     * @param approver 审批人
     * @return 是否成功
     */
    boolean approveDecoration(Long id, String status, String approver);

    /**
     * 验收装修
     * @param id 主键ID
     * @return 是否成功
     */
    boolean inspectDecoration(Long id);
    
    /**
     * 验收装修
     * @param id 装修ID
     * @param inspector 验收人
     * @param inspectionResult 验收结果
     * @param inspectionNotes 验收备注
     * @return 是否成功
     */
    boolean inspectDecoration(Long id, String inspector, String inspectionResult, String inspectionNotes);
    
    /**
     * 验收装修（带照片）
     * @param id 装修ID
     * @param inspector 验收人
     * @param inspectionResult 验收结果
     * @param inspectionNotes 验收备注
     * @param inspectionPhotosUrl 验收照片URL
     * @return 是否成功
     */
    boolean inspectDecoration(Long id, String inspector, String inspectionResult, String inspectionNotes, String inspectionPhotosUrl);
    


    /**
     * 获取装修详情（包含验收信息）
     * @param id 装修ID
     * @return 装修详情
     */
    DecorationDetailDto getDecorationDetail(Long id);
    
    /**
     * 新增装修申请（包含收费标准）
     * @param applicationDto 装修申请信息
     * @return 是否成功
     */
    boolean addDecorationWithCharges(DecorationApplicationDto applicationDto);

}